//// PartAlterLinkAOP.java
//package cqrtplm.aop;
//
//import com.hustcad.plm.basic.log.LogEventEnum;
//import com.hustcad.plm.basic.log.TyplmLogger;
//import com.hustcad.plm.pdm.middle.partbom.service.TyplmPdmPartService;
//import com.hustcad.plm.pdm.partbom.controller.TyplmPartAlternateController;
//import com.hustcad.plm.pdm.partbom.enums.PartBomErrorCodeEnum;
//import com.hustcad.plm.pdm.partbom.service.partalternate.TyplmPdmPartAlternateService;
//import com.hustcad.plm.pdm.partbom.vo.PartAlterLinkVO;
//import com.hustcad.plm.pdm.partbom.vo.virtualpart.PartAlterLinkResultVO;
//import com.ty.basic.entity.CTyEntityBaseDO;
//import com.ty.basic.response.ResponseResult;
//import com.ty.basic.utils.ArgumentUtils;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.After;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.springframework.stereotype.Component;
//import org.springframework.transaction.event.TransactionPhase;
//import org.springframework.transaction.event.TransactionalEventListener;
//
//
//import javax.annotation.Resource;
//import java.math.BigInteger;
//import java.util.*;
//
//@Component
//@Aspect
//public class PartAlterLinkAOP {
//    @Resource
//    private TyplmPdmPartService typlmPdmPartService;
//    @Resource
//    private TyplmPartAlternateController typlmPartAlternateController;
//    @Resource
//    private TyplmPdmPartAlternateService typlmPartAlternateService;
//    @Resource
//    private TyplmLogger typlmLogger;
//    /**
//     * 切面拦截 TyplmPartAlternateController.batchSavePartAlterLink 方法
//     */
//    @After("execution(* com.hustcad.plm.pdm.partbom.controller.TyplmPartAlternateController.batchSavePartAlterLink(..))")
//    public Object handlePartAlterLink(ProceedingJoinPoint joinPoint) throws Throwable {
//        // 获取原始参数
//        List<PartAlterLinkVO> originalParams = (List<PartAlterLinkVO>) joinPoint.getArgs()[0];
//
//        // 执行原方法
//        ResponseResult result = (ResponseResult) joinPoint.proceed();
//
//        // 处理返回结果并调用其他系统接口
//        processAndCallOtherSystem(originalParams, result);
//
//        return result;
//    }
//
//    /**
//     * 处理数据并调用其他系统接口
//     */
//
//
//    // 修改 processAndCallOtherSystem 方法，只准备数据
//    private void processAndCallOtherSystem(List<PartAlterLinkVO> originalParams, ResponseResult resultMap) {
//        try {
//            // 解析返回结果
//            List<PartAlterLinkResultVO> dataList = (List<PartAlterLinkResultVO>) resultMap.getData();
//
//            // 创建新参数列表
//            List<PartAlterLinkVO> newParams = new ArrayList<>();
//
//            // 建立 alternateForOid 到返回数据的映射
//            Map<String,PartAlterLinkResultVO> oidToResultMap = new HashMap<>();
//            for (PartAlterLinkResultVO data : dataList) {
//                String alternateForNumber =data.getAlternateForNumber();
//                String alternateNumber = data.getAlternateNumber();
//                // 构造映射key: alternateForNumber + "_" + alternateNumber
//                String key = alternateForNumber + "_" + alternateNumber;
//                oidToResultMap.put(key, data);
//            }
//
//            // 组装新的参数对象
//            for (PartAlterLinkVO original : originalParams) {
//                String key = original.getAlternateForNumber() + "_" + original.getAlternateNumber();
//                PartAlterLinkResultVO resultData = oidToResultMap.get(key);
//                if (resultData != null) {
//                    PartAlterLinkVO newVo = new PartAlterLinkVO();
//                    newVo.setAlternateNumber(original.getAlternateForNumber()); // 原alternateForNumber作为alternateNumber
//                    newVo.setAlternateOid(original.getAlternateForOid());       // 原alternateForOid作为alternateOid
//                    newVo.setAlternateForNumber(original.getAlternateNumber()); // 原alternateNumber作为alternateForNumber
//                    newVo.setAlternateForOid(new BigInteger(resultData.getId()));    // 返回结果中的id作为alternateForOid
//                    newVo.setReplacementType(original.getReplacementType());
//                    newVo.setNewReplacementType(original.getNewReplacementType());
//                    newVo.setUpdateCheckFlag(original.getUpdateCheckFlag());
//                    newVo.setDescription(original.getDescription());
//                    newVo.setSubstituteDate(original.getSubstituteDate());
//                    newVo.setReferenceDoc(original.getReferenceDoc());
//
//                    newParams.add(newVo);
//                }
//            }
//
//            // 发布事件，在事务提交后处理
//            if (!newParams.isEmpty()){
//                publishBatchSaveEvent(newParams);
//            }
//
//        } catch (Exception e) {
//            // 异常处理，避免影响主流程
//            e.printStackTrace();
//        }
//    }
//
//    // 添加事件发布方法
//    private void publishBatchSaveEvent(List<PartAlterLinkVO> newParams) {
//        // 这里可以使用ApplicationEventPublisher发布事件
//        // 或者直接调用带事务监听的方法
//        handleBatchSaveAfterCommit(newParams);
//    }
//    // 添加事务提交后执行的方法
//    @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
//    private void handleBatchSaveAfterCommit(List<PartAlterLinkVO> partAlterLinkVOList) {
//        try {
//            // 检查参数是否为空
//            if (partAlterLinkVOList == null || partAlterLinkVOList.isEmpty()) {
//                return;
//            }
//
//            // 调用服务方法处理零部件替代关系
//            this.typlmPartAlternateService.batchSavePartAlterLink(partAlterLinkVOList);
//        } catch (Exception e) {
//            // 记录异常日志，避免影响主流程
//            e.printStackTrace();
//            // 可以考虑添加更详细的日志记录
//            // logger.error("处理零部件替代关系失败", e);
//        }
//    }
//
//
//
//
//
//}
